/*
Sliplify Path
Given an absolute path for a file (Unix-style), simplify it.

For example,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"

Corner Cases:
Did you consider the case where path = "/../"?
In this case, you should return "/".
Another corner case is the path might contain multiple slashes '/' together, such as "/home//foo/".
In this case, you should ignore redundant slashes and return "/home/foo".
*/
#include <iostream>
#include <string>
#include <assert.h>
#include  <vector>

using namespace std;

class Solution {
public:
    string simplifyPath(string path) {
		assert(path[0]=='/');
		
		vector<string> vec;
		
		int i =0;
		while(i<path.size())
		{
			int end = i+1;
			while(end<path.size()&&path[end]!='/')
			{
				end++;
			}
			string sub = path.substr(i+1,end-i-1);
			if(sub.length()>0)
			{
				if(sub=="..")
				{
					if(!vec.empty())vec.pop_back();
				}else if(sub != ".")
				{
					vec.push_back(sub);
				}
			}
			i = end;
		}
		if(vec.empty()) return "/";
		string result;
		for(int i = 0; i < vec.size();i++)
		{
			result+="/"+vec[i];
		}
		return result;
		
    }
};

int main()
{
	cout<<"Sliplify"<<endl;
	cout<<"Input the string"<<endl;
	string s;
	Solution so;
	
	cout<<so.simplifyPath(s)<<endl;
	
	return 0;
}
